---
theme: gaia
_class: lead
paginate: true
backgroundColor: #fff
marp: true
math: mathjax
---

<style>
img[alt~="center"] {
  display: block;
  margin: 0 auto;
}
code {
    background: #000;
}
pre {
    background: #000;
}
</style>

# Программирование на основе классов и шаблонов

<style scoped>
h1 {
    font-size: 1.5rem;
}
h2 {
    font-size: 1rem;
}
</style>

![bg left:40% 80%](../images/iu5edu_logo.jpg)

## Цели и задачи дисциплины

**Аладин** Дмитрий Владимирович

[iu5edu.ru/wiki/cpp2](https://iu5edu.ru/wiki/cpp2)

---

# О лекторе

<style scoped>
h1 {
    font-size: 0.9em;
}
h2 {
    font-size: 0.8rem;
}
h3 {
    font-size: 0.6rem;
}
p {
    font-size: 0.5rem;
}
</style>

![bg left:41% 100%](../images/lecturer.jpg)

## **Аладин** Дмитрий Владимирович

ассистент кафедры ИУ5 МГТУ им. Н.Э. Баумана
*системный архитектор*

### Образование

МГТУ им. Н.Э. Баумана, факультет "Информатика и системы управления", кафедра "Системы обработки информации и управления" (ИУ5) (магистр)

### Дополнительная информация

• **Более 100 научных работ** в сфере систем обработки информации и управления (из них 10 ВАК и 15 Scopus).
• В IT-сфере с **2016 года**.

### О себе

**Основная деятельность**: проектирование и разработка интеллектуальных систем поддержки принятия решений и экспертных систем нового поколения.

**Языки программирования**: Go, С#, Python, C/C++, SQL, PL/SQL, JavaScript.

**Персональная страница**: [dmitry.icu](https://dmitry.icu/).

---

# Преподаватели дисциплины

<style scoped>
h1 {
    font-size: 0.9em;
}
h2 {
    font-size: 0.7em;
}
li {
    font-size: 0.6em;
}
</style>

![bg left:50% 90%](./images/team.png)

- **Аладин** Дмитрий Владимирович
- **Бурмистрова** Мария Валентиновна
- **Дятленко** Елена Александровна
- **Плужникова** Ольга Юрьевна
- **Правдина** Анна Дмитриевна
- **Селивёрстова** Анастасия Валерьевна

## Магистры

- **Сысоев** Александр Никитич ИУ5-21М
- **Злых** Алан Калкенович ИУ5-22М
- **Незаметдинов** Тимур Ильясович ИУ5-22М
- **Пакало** Александр Сергеевич ИУ5-22М

---

# Контакты

<style scoped>
li {
    font-size: 0.87em;
}
</style>

![bg right:60% 100%](./images/contacts.png)

Взаимодействие:

- Чат потока в Telegram
- Отдельные чаты с группами
*(по усмотрению преподавателей)*

---

# Методический материал

<style scoped>
h1 {
    font-size: 1.2em;
}
li {
    font-size: 1em;
}
</style>

![bg left:50% 90%](./images/people.svg)

- Электронный ресурс: [iu5edu.ru/wiki/cpp2](https://iu5edu.ru/wiki/cpp2).
- [Проект на МосХаб](https://hub.mos.ru/iu5bmstu/lections-and-labs/cpp2).
- Предыдущая версия методического материала:
[https://e-learning.bmstu.ru/iu5/](https://e-learning.bmstu.ru/iu5/course/view.php?id=61).

---

# Зачем мы здесь собрались?

![height:500px center](images/small-history-mem.jpeg)

---

# Цель изучения дисциплины

- Подготовка в области проектирования и разработки информационных систем на основе объектно-ориентированного подхода (ООП);
- Освоение современных систем объектного программирования и систем классов;
- Постижение процессов отладки сложных программных систем и оформления проектной и эксплуатационной документации программных систем, построенных на основе ООП.

---

## Задачи преподавания дисциплины

- Формирование базовых знаний по объектно-ориентированному программированию информационных систем;
- Получение навыков самостоятельного изучения и использования существующих систем классов и современных технологий, основанных на ООП;
- Овладение знаниями и умениями создания собственных систем классов для создания информационных систем, их отладки и документирования;

---

- Формирование умения применять современные технологии, основанные на ООП при разработке и проектировании автоматизированных систем обработки информации и управления;
- Формирование навыков и умения оформлять проектную, эксплуатационную и приемно-сдаточную документацию на программные продукты;
- Научиться проводить приемно-сдаточные испытания программных продуктов, основанных на системах классов.

---

# Обзор разделов дисциплины

![bg right:40% 90%](./images/template-mem.jpg)

Принципы и технологии программирования на основе:

- **Классов**
Модуль 1. Основны ООП
- **Шаблонов**
Модуль 2. Шаблоны ООП

---

# Обзор разделов дисциплины

<style scoped>
h1 {
    font-size: 1.2em;
}
h2 {
    font-size: 1em;
}
li {
    font-size: 1rem;
}
</style>

## Модуль 1. Основны ООП

1. Системы сборки кроссплатформенного программного обеспечения из исходного кода
2. Концепции и парадигмы программирования
3. Теоретические основы ООП
4. Описание и реализация классов
5. Перегрузка операций и отношения между классами
6. Наследование

---

# Обзор разделов дисциплины

<style scoped>
h1 {
    font-size: 1.2em;
}
h2 {
    font-size: 1em;
}
li {
    font-size: 0.8rem;
}
</style>

## Модуль 2. Шаблоны ООП

1. Шаблоны
2. Дополнительные сведения об ООП
3. Стандартная библиотека шаблонов C++
4. Коллекции универсальных библиотек C++
5. Принципы ОО дизайна
6. Шаблоны проектирования
7. Отладка и тестирование объектно-ориентированных программ
8. Документация и диаграммы, разрабатываемые в ООП
9. Системы объектно-ориентированного программирования, их особенности. Состав и технологии создания программ

---

# Семинары

<style scoped>
h1 {
    font-size: 1.2em;
}
p {
    font-size: 1rem;
}
</style>

Каждый преподаватель индивидуально выбирает обсуждаемые темы, ориентируясь на рабочую программу дисциплины.

![height:400px center](images/seminar.jpg)

---

# Домашнее задание и практика

<style scoped>
h1 {
    font-size: 1.2em;
}
li {
    font-size: 1rem;
}
</style>

![bg left:50% 120%](./images/projectmanager.png)

У нас два вида работ:

- **практика** (проект);
- **домашнее задание** (часть задач по проекту).

См. подробнее в [iu5edu.ru/wiki/cpp2](https://iu5edu.ru/wiki/cpp2).

**Практика проверяется в рамках РК!**

---

# ЛР: Нюанс 1. Отказываемся от Windows

<style scoped>
h1 {
    font-size: 1.2em;
}
</style>

![windows-mem height:550px center](images/windows-mem.jpeg)

---

# ЛР: Нюанс 2. Используем кроссплатформенные IDE

<style scoped>
h1 {
    font-size: 1em;
}
li {
    font-size: 0.9em;
}
</style>

![bg right:50% 120%](./images/clion-mem.png)

- Visual Studio Code - основная IDE
- ~~CLion~~ с весны 2023 года JetBrains получили статус "нерукпожатные"
- Visual Studio - без Windows нагрузок
- VIM/NVIM (на свой страх и риск)
- [Zed](https://zed.dev/) - надо пробовать 🤷‍♂️

---

# ЛР: Нюанс 3. Используем CMake для сборки программ

<style scoped>
h1 {
    font-size: 1.1em;
}
</style>

Как это делать, вы узнаете в следующей лекции.

![height:400px center](images/cmake.png)

---

# ЛР: Нюанс 4. Используем статический анализатор

<style scoped>
h1 {
    font-size: 1.2em;
}
</style>

- Код должен проходить все проверки статического анализатора.
- В качестве статического анализатора использовать [Cppcheck](http://cppcheck.net/).
- Результат проверки кода статическим анализатором кода демонстрируется студентом при защите лабораторной работы.
- В случае, если проверка анализатора кажется избыточной, необходимо уметь объяснить, почему замечание анализатора по данной ошибке не было учтено.

---

# ЛР: Нюанс 5. "Презумпция виновности"

<style scoped>
h1 {
    font-size: 1.2em;
}
</style>

![questions height:500px center](images/devil-mem.jpg)

---

Студент должен подтвердить, что код был написан им (отсутствие плагиата). Это достигается за счет:

1. Демонстрация **понимания работы программы** и ее **алгоритмов функционирования**.
2. **Ориентации в коде** программы.
3. **Умения реализовать** дополнительные функциональные возможности в программе.

---

# ЛР: Нюанс 6. Дедлайны и оценка

<style scoped>
h1 {
    font-size: 1.2em;
}
</style>

![bg right:50% 200%](./images/detail.jpg)

За каждую работу выставляется оценка.

**Дедлайнов нет**, НО Но можно выставить оценку $-0.5$, если студент [значительно задержал работу](https://iu5edu.ru/wiki/cpp2/docs/labs).

---

# Другие нюансы

Другие нюансы вы узнаете при изучении электронного ресурса предыдущей дисциплины "Основы программирования": [iu5edu.ru/wiki/cpp1](https://iu5edu.ru/wiki/cpp1/docs/labs).

---

# Особенности дисциплины

<style scoped>
h1 {
    font-size: 0.9em;
}
h2 {
    font-size: 0.8em;
}
li {
    font-size: 0.75rem;
}
p {
    font-size: 0.75rem;
}
</style>

## Зачем следим

![bg right:60% 80%](./images/rule-3P.jpeg)

Правило трёх **П** :

- **Посещаемость** на семинарах и лекциях
- **Прогресс** по выполнению домашнего задания и практики
- **Прилежность** в выполнении лабораторных работ (см. нюансы ЛР)

---

# Экзамен

<style scoped>
h1 {
    font-size: 1em;
}
li {
    font-size: 0.8rem;
}
p {
    font-size: 0.8rem;
}
</style>

На оценку влияет:

- Ответ на билет
- Успешность следованию "правилу трёх П"
- Результат выполнения домашнего задания и практики

![questions height:350px center](images/exam-mem.png)

---

# Вопросы?

<style scoped>
p {
  text-align: center;
}
</style>

![questions height:500px](../images/questions.jpg)
